package com.Sep_Thirtyy;

import java.util.ArrayList;
import java.util.List;

/**
 * 784. 字母大小写全排列
 * 给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 * <p>
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 * <p>
 *  
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/letter-case-permutation
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * 2022/10/01 00:42
 */

public class Solution784 {

    List<String> list = new ArrayList<>();
    char[] array;

    public List<String> letterCasePermutation(String s) {
        array = s.toCharArray();
        backtracking(0, new StringBuilder());
        return list;
    }

    /**
     * 方法一
     * @param index
     * @param sb
     */
//    public void backtracking(int index,StringBuilder sb){
//        if (index>=array.length)
//        {
//            list.add(sb.toString());
//            return;
//        }
//        backtracking(index+1,new StringBuilder(sb).append(array[index]));
//        if (array[index]>='a')
//        {
//            backtracking(index+1,new StringBuilder(sb).append((char) (array[index]-32)));
//        }else if (array[index]>='A')
//        {
//            backtracking(index+1,new StringBuilder(sb).append((char) (array[index]+32)));
//        }
//    }

    /**
     * 方法二（与方法一一样）
     */
    void backtracking(int index, StringBuilder sb) {
        if (index == array.length) {
            list.add(sb.toString());
            return;
        }
        backtracking(index + 1, new StringBuilder(sb).append(array[index]));
        if (!(array[index] >= '0' && array[index] <= '9')) {
            //array[index]^=32;
            backtracking(index + 1, new StringBuilder(sb).append((char) (array[index] ^ 32)));
        }

    }

    public static void main(String[] args) {
        Solution784 solution784 = new Solution784();
        System.out.println(solution784.letterCasePermutation("a1b2"));
    }
}
